package cn.zhl.controller;

import cn.zhl.base.BaseResult;
import cn.zhl.base.PageModel;
import cn.zhl.model.EsPage;
import cn.zhl.model.PageDto;
import cn.zhl.util.ElasticsearchUtil;
import com.alibaba.fastjson.JSONObject;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

/**
 * @program: demos
 * @description:
 * @author: 刘振华
 * @create: 2020-04-10 09:00
 **/
@RestController
@RequestMapping("/es")
public class EsController {
//    private String indexName = "employee_test";
//    private String esType = "info";
//    /**
//     * 创建索引
//     * http://127.0.0.1:8080/es/createIndex
//     * @param request
//     * @param response
//     * @return
//     */
//    @GetMapping("/createIndex/{index}")
//    public String createIndex(HttpServletRequest request, HttpServletResponse response,
//                              @PathVariable(name = "index")String index) {
//        if (!ElasticsearchUtil.isIndexExist(index)) {
//            ElasticsearchUtil.createIndex(index);
//        } else {
//            return "索引已经存在";
//        }
//        return "索引创建成功";
//    }
//
//    /**
//     * 插入记录
//     *
//     * @return
//     */
//    @GetMapping("/insertJson")
//    public String insertJson() {
//        JSONObject jsonObject = new JSONObject();
//        jsonObject.put("id", DateUtil.formatDate(new Date()));
//        jsonObject.put("age", 25);
//        jsonObject.put("first_name", "j-" + new Random(100).nextInt());
//        jsonObject.put("last_name", "cccc");
//        jsonObject.put("about", "i like xiaofeng baby");
//        jsonObject.put("date", new Date());
//        String id = ElasticsearchUtil.addData(jsonObject, indexName, esType, jsonObject.getString("id"));
//        return id;
//    }
//
//    /**
//     * 插入记录
//     *
//     * @return
//     */
//    @PostMapping("/insertModel")
//    public String insertModel(@RequestBody Employee employee) {
//        employee.setFirstName("m-" + new Random(100).nextInt());
//        JSONObject jsonObject = (JSONObject) JSONObject.toJSON(employee);
//        String id = ElasticsearchUtil.addData(jsonObject, indexName, esType, jsonObject.getString("id"));
//        return id;
//    }
//
//    /**
//     * 删除记录
//     *
//     * @return
//     */
//    @RequestMapping("/delete")
//    public String delete(String id) {
//        if (StringUtils.isNotBlank(id)) {
//            ElasticsearchUtil.deleteDataById(indexName, esType, id);
//            return "删除id=" + id;
//        } else {
//            return "id为空";
//        }
//    }
//
//    /**
//     * 更新数据
//     *
//     * @return
//     */
//    @RequestMapping("/update")
//    public String update(String id) {
//        if (StringUtils.isNotBlank(id)) {
//            JSONObject jsonObject = new JSONObject();
//            jsonObject.put("id", id);
//            jsonObject.put("age", 31);
//            jsonObject.put("name", "修改");
//            jsonObject.put("date", new Date());
//            ElasticsearchUtil.updateDataById(jsonObject, indexName, esType, id);
//            return "id=" + id;
//        } else {
//            return "id为空";
//        }
//    }
//
//    /**
//     * 获取数据
//     * http://127.0.0.1:8080/es/getData?id=2018-04-25%2016:33:44
//     *
//     * @param id
//     * @return
//     */
//    @RequestMapping("/getData/{index}")
//    public String getData(String id) {
//        if (StringUtils.isNotBlank(id)) {
//            Map<String, Object> map = ElasticsearchUtil.searchDataById(indexName, esType, id, null);
//            return JSONObject.toJSONString(map);
//        } else {
//            return "id为空";
//        }
//    }
//
//    /**
//     * 查询数据
//     * 模糊查询
//     *
//     * @return
//     */
//    @RequestMapping("/queryMatchData")
//    public String queryMatchData() {
//        BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
//        boolean matchPhrase = false;
//        if (matchPhrase == Boolean.TRUE) {
//            //不进行分词搜索
//            boolQuery.must(QueryBuilders.matchPhraseQuery("first_name", "cici"));
//        } else {
//            boolQuery.must(QueryBuilders.matchQuery("last_name", "cici"));
//        }
//        List<Map<String, Object>> list = ElasticsearchUtil.
//                searchListData(indexName, esType, boolQuery, 10, "first_name", null, "last_name");
//        return JSONObject.toJSONString(list);
//    }
//
//    /**
//     * 通配符查询数据
//     * 通配符查询 ?用来匹配1个任意字符，*用来匹配零个或者多个字符
//     *
//     * @return
//     */
//    @RequestMapping("/queryWildcardData")
//    public String queryWildcardData() {
//        QueryBuilder queryBuilder = QueryBuilders.wildcardQuery("first_name.keyword", "cici");
//        List<Map<String, Object>> list = ElasticsearchUtil.searchListData(indexName, esType, queryBuilder, 10, null, null, null);
//        return JSONObject.toJSONString(list);
//    }
//
//    /**
//     * 正则查询
//     *
//     * @return
//     */
//    @RequestMapping("/queryRegexpData")
//    public String queryRegexpData() {
//        QueryBuilder queryBuilder = QueryBuilders.regexpQuery("first_name.keyword", "m--[0-9]{1,11}");
//        List<Map<String, Object>> list = ElasticsearchUtil.searchListData(indexName, esType, queryBuilder, 10, null, null, null);
//        return JSONObject.toJSONString(list);
//    }
//
//    /**
//     * 查询数字范围数据
//     *
//     * @return
//     */
//    @RequestMapping("/queryIntRangeData")
//    public String queryIntRangeData() {
//        BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
//        boolQuery.must(QueryBuilders.rangeQuery("age").from(24)
//                .to(25));
//        List<Map<String, Object>> list = ElasticsearchUtil.searchListData(indexName, esType, boolQuery, 10, null, null, null);
//        return JSONObject.toJSONString(list);
//    }
//
//    /**
//     * 查询日期范围数据
//     *
//     * @return
//     */
//    @RequestMapping("/queryDateRangeData")
//    public String queryDateRangeData() {
//        BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
//        boolQuery.must(QueryBuilders.rangeQuery("age").from("20")
//                .to("50"));
//        List<Map<String, Object>> list = ElasticsearchUtil.searchListData(indexName, esType, boolQuery, 10, null, null, null);
//        return JSONObject.toJSONString(list);
//    }

	/**
	 * 查询分页
	 * <p>
	 * 从0开始
	 * 第1页 ：http://11.2.197.200:8181/es/queryPage
	 *
	 * @return
	 */
	@PostMapping("/queryPage")
	public Object queryPage(@RequestBody PageModel<PageDto> page) {
		BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
		EsPage esPage = ElasticsearchUtil.searchDataPage(page.getIndex(),
			page.getType(), page.getCurrent(), page.getSize(),
			boolQuery, null, "time", null);


		List<PageDto> pds = new ArrayList<>();
		esPage.getRecordList().stream().forEach(record -> {

			PageDto tmp = PageDto.builder()
				.id(record.get("id").toString())
				.data(JSONObject.toJSONString(record))
				.build();
			pds.add(tmp);
		});
		page.setRecords(pds);
		page.setTotal(esPage.getRecordCount());
		System.out.println(page);
		return BaseResult.success(page);
	}
}
